//
//  JBSNSShare.h
//  
//
//  Created by zhangyongbin on 7/14/15.
//
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

/**
 SNS平台类型
 */
typedef NS_ENUM(NSInteger, JBSNSType) {
    JBSNSTypeUnknown = 0,
    JBSNSTypeSinaWeibo,                     // 新浪微博
    JBSNSTypeWechat,                        // 微信
    JBSNSTypeQQ,                            // QQ
};

typedef NS_ENUM(NSInteger, JBSNSShareType) {
    JBSNSShareTypeToSinaWeibo,               // 分享到新浪微博
    JBSNSShareTypeToWechatSession,           // 分享到微信好友
    JBSNSShareTypeToWechatTimeline,          // 分享到微信朋友圈
    JBSNSShareTypeToMobileQQ,                // 分享到手机QQ
    JBSNSShareTypeToQzone,                   // 分享到QQ空间
};

/**
 SNS分享回调的block类型
 */
typedef void(^JBSNSShareResultBlock)(NSError *error);


/**
 分享结果状态码
 */
typedef enum {
    JBSNSShareResultCodeSuccess            = 200,        //成功
    JBSNSShareResultCodeTokenInvalid       = 400,        //授权用户token错误
    JBSNSShareResultCodeBaned              = 505,        //用户被封禁
    JBSNSShareResultCodeFaild              = 510,        //发送失败（由于内容不符合要求或者其他原因）
    JBSNSShareResultCodeArgumentsError     = 522,        //参数错误,提供的参数不符合要求
    JBSNSShareResultCodeEmptyContent       = 5007,       //发送内容为空
    JBSNSShareResultCodeShareRepeated      = 5016,       //分享内容重复
    JBSNSShareResultCodeGetNoUidFromOauth  = 5020,       //授权之后没有得到用户uid
    JBSNSShareResultCodeAccessTokenExpired = 5027,       //token过期
    JBSNSShareResultCodeNetworkError       = 5050,       //网络错误
    JBSNSShareResultCodeGetProfileFailed   = 5051,       //获取账户失败
    JBSNSShareResultCodeCancel             = 5052,        //用户取消授权
    JBSNSShareResultCodeNotLogin           = 5053,       //用户没有登录
    JBSNSShareResultCodeNoApiAuthority     = 100031      //QQ空间应用没有在QQ互联平台上申请上传图片到相册的权限
} JBSNSShareResultCode;


/**
 
 */
@interface JBSNSShare : NSObject


/********************************************************************
 下面的方法在
 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
 中调用。
 ********************************************************************/

/**
 设置第三方SNS分享平台的AppKey
 @param appKey 第三方SNS分享平台appKey
 */
+ (void)setSNSSharePlatformAppKey:(NSString *)appKey;

/**
 设置App的网站的URL地址
 @param url App网站
 */
+ (void)setAppWebSitURL:(NSString *)url;

/**
 设置SNS平台的AppId、AppKey和SecretKey
 @param snsType SNS平台类型
 @param appId SNS平台上的appId，若没有则传入nil
 @param appKey SNS平台上的appKey或SecretKey，若没有则传入nil
 @param appSecret SNS平台的appSecret或secretKey，若没有则传入nil
 */
+ (void)setSNSAuthInfoWithSnsType:(JBSNSType)snsType appId:(NSString *)appId appKey:(NSString *)appKey appSecret:(NSString *)appSecret;

/**
 打开新浪微博的SSO开关，设置新浪微博回调地址，这里必须要和你在新浪微博后台设置的回调地址一致
 @param redirectURL 新浪微博回调地址
 */
+ (void)openSinaWeiboSSOWithRedirectURL:(NSString *)redirectURL;





/********************************************************************
 下面的方法在
 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
 中调用。
 ********************************************************************/

/**
 处理app的URL方法
 @param url 传入的url
 @return true/false 处理结果
 
 使用方法：
 - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
 {
 return  [JBSNSShare handleOpenURL:url];
 }
 */
+ (BOOL)handleOpenURL:(NSURL *)url;


/********************************************************************
 下面的方法在
 - (void)applicationDidBecomeActive:(UIApplication *)application;
 中调用。
 ********************************************************************/

/**
 当应用从后台唤起时，应调用此方法，需要完成退出当前登录状态的功能
 
 使用方法：
 - (void)applicationDidBecomeActive:(UIApplication *)application
 {
 [JBSNSShare applicationDidBecomeActive];
 }
 */
+(void)applicationDidBecomeActive;



/********************************************************************
 使用分享平台的默认分享UI进行分享
 ********************************************************************/

/**
 弹出一个分享列表的类似UIActivityViewController控件
 
 @param controller 在该controller弹出分享列表的UIActionSheet
 @param appKey 友盟appKey
 @param shareText  分享编辑页面的内嵌文字
 @param shareImage 分享内嵌图片,用户可以在编辑页面删除
 @param completionBlock 发送完成执行的block对象
 */
+(void)presentSnsIconSheetView:(UIViewController *)controller
                         title:(NSString *)title
                       content:(NSString *)content
                         image:(id)image
                           url:(NSString *)url
                      completion:(JBSNSShareResultBlock)completionBlock;



/********************************************************************
 直接指定分享类型进行分享
 ********************************************************************/

/**
 分享文本+图片到SNS平台
 @param snsType             分享类型
 @param title               分享内容标题
 @param content             分享的文字内容
 @param image               分享的图片
 @param url                 点击分享内容后的跳转链接
 @param controller          在该controller进行分享
 @param completion          发送完成执行的block对象
 */
+ (void)shareWithShareType:(JBSNSShareType)snsShareType Title:(NSString *)title Content:(NSString *)content image:(UIImage *)image url:(NSString *)url presentedController:(UIViewController *)controller completion:(JBSNSShareResultBlock)completionBlock;

@end
